import urls from '../urls';

/**
    * 从storage中获取用户信息数据
    * callback回调函数 会传入两个参数。 第一个参数是否获取成功，第二个是获取成功的数据或者错误信息
    *
    */
function _getStorageOpenId(callback) {
    var options = {
        key: 'wx_open_id',
        success: res => callback && callback(true, res.data),
        fail: res => callback && callback(false, res)
    };
    wx.getStorage(options);
}

/**
 * 通过code请求后台获取openId
 * @param code 获取openId所需要的code
 * @param callback 会传入两个参数。 第一个参数是否获取成功，第二个是获取成功的数据或者错误信息
 */
function _getOpenId(code, callback) {
    var data = {
        code: code,
        appId: wx.getAccountInfoSync().miniProgram.appId
    };
    var options = {
        method: 'get',
        url: urls.login_for_user_info,
        data: data,
        success: res => callback && callback(true, res.data.result.openId),
        fail: res => callback && callback(false, res)
    };

    wx.request(options);
}

/**
 * 调用wx.login方法获取用户换取OpenId所需要的Code
 * callback回调函数 会传入两个参数。 第一个参数是否获取成功，第二个是获取成功的数据或者错误信息
 */
function _getUserCode(callback) {
    var options = {
        success: res => callback && callback(true, res.code),
        fail: res => callback && callback(true, res)
    };
    wx.login(options);
}

/**
 * 把openId存储到storage中
 * @param openId openId
 */
function _setStorageOpenId(openId) {
    var options = {
        key: 'wx_open_id',
        data: openId
    };
    wx.setStorage(options);
}

function getOpenId(callback) {

    _getStorageOpenId(function (success, openId) {
        if (success) {
            callback && callback(openId);
        } else {
            _getUserCode(function (success, code) {
                if (!success) {
                    console.log('获取用户code失败');
                } else {
                    _getOpenId(code, function (success, openId) {
                        if (success) {
                            _setStorageOpenId(openId)
                            callback && callback(openId);
                        } else {
                            console.log('获取openId失败');
                        }
                    })
                }
            })
        }
    });
}

export default getOpenId;